# Читаем книгу асинхронно
# Ваша задача: дополнить функцию main(), чтобы три студента — Алекс, Мария и Иван — могли читать книги асинхронно.
# Все студенты начинают читать, но из-за различной скорости чтения заканчивают чтение они в разное время. 
# Используя асинхронное программирование и функцию asyncio.create_task(), вы должны сделать так, чтобы
# каждый студент начал и закончил чтение в соответствии со своим индивидуальным временем.

# Функция read_book() принимает имя студента и время, необходимое ему для чтения книги. Порядок вывода
# сообщений должен отражать реальный порядок начала и завершения чтения.
# import asyncio
# import time

# dct = {
#     'Иван': 4,
#     'Мария': 3,
#     'Алекс': 5
# }

# async def read_book(student, time):
#     print(f"{student} начал читать книгу.")
#     await asyncio.sleep(time)
#     print(f"{student} закончил читать книгу за {time} секунд.")

# async def main():
    # Создаем задачи для асинхронного выполнения
    # task2  = asyncio.create_task(read_book("Мария", 3))
    # task1 = asyncio.create_task(read_book("Алекс", 5))
    # task3   = asyncio.create_task(read_book("Иван", 4))
    #await task1, task2, task3
    # await task1 
    # await task2
    # await task3
#     tasks = [asyncio.create_task(read_book(student, time)) for student, time in dct.items()]
#     await asyncio.gather(*tasks)


# start = time.perf_counter()
# asyncio.run(main())

# end = time.perf_counter()
# print(f'Программа выполнилась за {end - start} секунд.')
##############################################################



import asyncio
# Полный словарь students вшит в задачу, вставлять его не нужно
# students = {}
students = {
    "Алекс": {"course": "Асинхронный Python", "steps": 515, "speed": 78},
    "Мария": {"course": "Многопоточный Python", "steps": 431, "speed": 62},
    "Иван": {"course": "WEB Парсинг на Python", "steps": 491, "speed": 57}
}

async def study_course(student, course, steps, speed):
    print(f"{student} начал проходить курс {course}.")
    reading_time = round(steps / speed, 2)
    await asyncio.sleep(reading_time)
    print(f"{student} прошел курс {course} за {reading_time} ч.")


async def main():
    tasks = [asyncio.create_task(study_course(name, 
                                              students[name]['course'],
                                              students[name]['steps'],
                                              students[name]['speed'])) 
             for name in students]
    await asyncio.gather(*tasks)
    # Создание задач с помощью asyncio.create_task для каждого студента

    # Ожидание завершения каждой задачи индивидуально

asyncio.run(main())